nginx编译安装与配置
===========================================
Nginx官网：http://nginx.org/
Nginx官网下载地址（选择 Stable version 稳定版）：http://nginx.org/en/download.html
官网安装介绍：http://nginx.org/en/linux_packages.html


一：安装

nginx 显示目录

http {
    autoindex on;  # 自动显示目录
    autoindex_exact_size off; # 人性化方式显示文件大小否则以byte显示
    autoindex_localtime on; # 按服务器时间显示，否则以gmt时间显示
}


二：配置

2.1：

2.2：

    配置：
        配置文件 的组成部分：
            主配置文件：nginx.conf
                include  conf.d/*.conf
            facscgi, scgi, uwscgi的相关配置
            mime.types

        配置指令（必须以分号结尾）：
            directive  value1 [value2...];
            
            支持使用变量：
                内置变量：由模块引入，可直接引用；
                自定义变量：set  variable_name  value;
                    
                    引用变量：$variable_name
                    
        配置文件结构：
            main block：全局配置；
            event {
                ...
            }：事件驱动的相关配置；
            http {
                ...
            }：http协议的相关配置
            mail {
                ...
            }：mail相关的配置；
        
            http相关的配置：
                http {
                    ...
                    ...
                    server {
                        ...
                        server_name
                        root
                        alias 
                        location /uri/ {
                            ...
                        }
                        ...
                    }
                    server {
                        ...
                        ...
                    }
                }
                
        main block：
            配置指令的类别：
                正常运行必备的配置；
                优化性能的配置；
                用于调试、定位问题的配置；
                
            正常运行必备的配置：
                1、user  USERNAME  [GROUPNAME];
                    指定用于运行worker进程的用户和组；
                    
                    user  nginx  nginx;
                    
                2、pid  /PATH/TO/PID_FILE;
                    指定nginx进程的pid文件路径；
                    
                    pid  /var/run/nginx.pid;
                    
                3、worker_rlimit_nofile number;
                    单个worker进程所能够打开的最大文件数；
                    
            性能优化相关的配置：
                1、  worker_processes number | auto;
                    worker的进程数；通常应该为CPU的核心数减1；
                    
                2、worker_cpu_affinity cpumask ...;
                      worker_cpu_affinity auto [cpumask]; 
                      
                      CPUMASK:
                        0000 0001
                        0000 0010
                        0000 0100
                        0000 1000
                        0001 0000
                        ...
                3、worker_priority nice;
                    [-20,19]
                        100-139
                        
            调试、定位问题：
                1、daemon on | off;
                    是否以守护进程方式启动nginx进程；
                    
                2、master_process on | off;
                    是否以master/worker模型启动nignx进程；
                    
                3、error_log file | stderr | syslog:server=address[,parameter=value] | memory:size [debug | info | notice | warn | error | crit | alert | emerg];
                    错误日志文件的记录方式，及其日志级别：
                        方式：
                            file  /PATH/TO/SOME_LOG_FILE;
                            stderr：发送到错误输出；
                             syslog:server=address[,parameter=value]：发送给syslog服务器；
                             memory:size
                             
                        日志级别：
                            debug依赖于configure时的--with-debug选项；
                            
回顾：IO模型、nginx

    IO模型：
        阻塞式
        非阻塞式
        IO复用（select, poll）
        信号驱动的IO（epoll, kqueue, /dev/poll）
        AIO
            
        阶段：等待数据准备完成，复制数据（从内核缓冲区到进程的地址空间）
        
    nginx：master/worker
        master
        worker（）
        cache loader
        cache manager
        
        模块类别：核心模块、标准模块（http标准模块，http可选模块，mail模块）、3rd模块
        
    nginx.conf
        main block
        event {
            ...
        }
        http {
            ...
            server {
                ...
                server_name
                root
                location /uri/ {
                    ...
                }
            }
            server {
                ...
            }
        }
        
Nginx(2)

    nginx.conf：
        main block
        events {
            ...
        }
        
            1、worker_connections number;
                每个worker进程所能够并发打开的最大连接数；
                
                worker_processes * worker_connections
                
            2、use method;
                指明并发连接请求处理时使用的方法；
                
                use  epoll;
                
            3、accept_mutex on | off;
                启用时，表示用于让多个worker轮流地、序列化地响应新请求；
                
        http {
            ...
        }
        
        定义套接字相关功能
        
            1、server { ... }
                配置一个虚拟主机；
                
                server {
                    listen PORT;
                    server_name  HOSTNAME; 
                    root /PATH/TO/DOCUMENTROOT;
                    ...
                }
                
                注意：
                    (1) 基于port的虚拟主机：
                        listen指令要使用不同的端口；
                    (2) 基于Hostname的虚拟主机；
                        server_name指令指向不同的主机名；
                    (3) 基于ip的虚拟主机：
                        listen IP:PORT;
                
            2、listen address[:port] [default_server] [ssl] [backlog=number] [rcvbuf=size] [sndbuf=size];
                  listen port [default_server] [ssl];
                  listen unix:path [default_server] [ssl] ;
                  
                default_server：默认虚拟主机；
                ssl：限制只能通过ssl连接提供服务；
                backlog：后缓队列的长度；
                rcvbuf：接收缓冲大小；
                sndbuf：发送缓冲区大小；
                
            3、server_name name ...;
                指明当前server的主机名；后可跟一个或空白字符分隔的多个主机；
                支持使用*任意长度的任意字符；
                支持~起始的正则表达式模式字符串；
                
                应用策略：
                    (1) 首先精确匹配；
                    (2) 左则*通配符匹配；
                    (3) 右侧*通配符匹配；
                    (4) 正则表达式模式匹配；
                                                                
                    server_name  www.magedu.com;
                    
                    server_name *.magedu.com;
                    
                    server_name  www.magedu.*;
                    
                    server_name ~^.*\.magedu\..*$;
                    
                    mail.magedu.com, www.magedu.com
                    
            4、tcp_nodelay  on|off;
                对keepalived模式下的连接是否启用TCP_NODELAY选项；
                
            5、sendfile on | off;
                是否启用sendfile功能；
                
        
        定义路径相关配置
            6、root path;
                设置web资源路径映射；用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径；
                可用上下文：http, server, location, if
                
            7、location [ = | ~ | ~* | ^~ ] uri { ... }
                  location @name { ... }
                  
                  根据用户请求的URI来匹配定义的location，匹配到时，此请求将被相应的location块中的指令所处理；
                  
                server {
                    ...
                    location {
                        
                    }
                    location {
                        ...
                    }
                }
                
                =：URI精确匹配；
                ~：做正则表达式模式匹配，区分字符大小写；
                ~*：做正则表达式模式匹配，不区分字符大小写；
                ^~：对URI的左半部分做匹配检查，不区分字符大小写；
                
                匹配优先级：=、^~、~/～*、不带符号；
                
            8、alias path;
                定义路径别名，文档映射的一种机制；仅能用于location上下文；
                
                alias  /bbs/  /web/forum/

                http://www.magedu.com/bbs/a.jpg     
                    
                    location  /bbs/  {
                        alias  /web/forum/;
                    }
                    
                    /web/forum/a.jpg
                
                    location  /bbs/  {
                        root  /web/forum/;
                    }
                    
                    /web/forum/bbs/a.jpg
                
                
                注意：
                    root指令：给定的路径对应于location中的/uri/左侧的/;
                    alias指令：给定的路径对应于location中的/uri/右侧的/；
                
            9、index file ...;
                可用位置：http, server, location
                
                默认主面；
                
            10、error_page code ... [=[response]] uri;
                根据用户请求的资源的http响应的状态码实现错误页重定向；
                
                http://www.magedu.com/hello.html --> 因为资源不存在而被改为对
                    http://www.magedu.com/404.html
                    
            11、
            
            
        
        定义客户端请求的相关配置
        
            12、keepalive_timeout timeout [header_timeout];
                设定保持连接的超时时长，0表示禁止长连接 ；默认为75s;
                
            13、keepalive_requests number;
                在一次长连接上所允许请求的资源的最大数量，默认为100；
                
            14、keepalive_disable none | browser ...;
                对哪种浏览器禁用长连接；
                
            15、send_timeout time;
                向客户端发送响应报文的超时时长； 特别地，是指两次写操作之间的间隔时长； 
            
            16、client_body_buffer_size size;
                用于接收客户端请求报文的body部分的缓冲区大小；默认为16k；超时此大小时，其将被暂存到磁盘上；
                
            17、client_body_temp_path path [level1 [level2 [level3]]];
                设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量；
                
                /var/tmp/body  2 1 2
                    00-ff
            
        
        对客户的请求进行限制的相关配置：
            18、limit_rate rate;
                限制响应给客户端的传输速率，单位是bytes/second，0表示无限制；
                
            19、limit_except method ... { ... };
                限制对指定的请求方法之外的其它方法的使用客户端；
                
                limit_except GET POST {
                    allow  172.18.0.0/16;
                    deny all;
                }
                
                表示除了GET和POST之外的其它方法仅允许172.18.0.0/16中的主机使用；
        
        文件操作优化的配置：
            20、aio on | off | threads[=pool];
                是否启用aio功能；
                
            21、directio size | off;
                
            22、open_file_cache off;
                open_file_cache max=N [inactive=time];
                    nginx可以缓存以下三种信息：
                        (1) 文件的描述符、文件大小和最近一次的修改时间；
                        (2) 打开的目录的结构；
                        (3) 没有找到的或者没有权限访问的文件的相关信息；
                        
                    max=N：可缓存的缓存项上限；达到上限后会使用LRU算法实现缓存管理；
                    
                    inactive=time：缓存项的超时时长，在此处指定的时长内未被命中的缓存项即为非活动项；
                    
            23、open_file_cache_errors on | off;
                是否缓存查找时发生错误的文件一类的信息；
                
            24、open_file_cache_min_uses number;
                在open_file_cache指令的inactive参数指定的时长内，至少命中此处指定的次数方可不被归类到非活动项；
                
            25、open_file_cache_valid time;
                缓存项有效性的检查频率；默认是60s；
                
        ngx_http_access_module模块：
            实现基于ip的访问控制功能；
            
            26、allow address | CIDR | unix: | all;
            27、deny address | CIDR | unix: | all;
            
            可用上下文：http, server, location, limit_except

        ngx_http_auth_basic_module模块：
            28、auth_basic string | off;
                使用basic机制进行用户认证；
                
            29、auth_basic_user_file file;
                认证用的账号密码文件；
                
                文件格式：
                    name:password:commet
                    
                密码格式：
                    htpasswd命令；
                    
                    location /admin/ {
                    auth_basic "Admin Area";
                    auth_basic_user_file /etc/nginx/.ngxpasswd;
                    }
                
        ngx_http_stub_status_module模块：
            用于输出nginx的基本状态信息；
            
            Active connections: 1 
            server accepts handled requests
            155 155 298 
            Reading: 0 Writing: 1 Waiting: 0        
            
            Active connections:  处于活动状态的客户端连接的数量；
            accepts：已经接受的客户端请求的总数；
            handled：已经处理完成的客户端请求的总数；
            requests：客户端发来的总的请求数；
            Reading：处于读取客户端请求报文首部的连接数；
            Writing：处于向客户端发送响应报文过程中的连接数；
            Waiting：处于等待客户端发出请求的空闲连接数；
            
        ngx_http_referer_module模块：
            The ngx_http_referer_module module is used to block access to a site for requests with invalid values in the “Referer” header field.
            
            30、valid_referers none | blocked | server_names | string ...;
                定义合法的referer数据；
                
                none：请求报文首部没有referer首部；
                blocked：请求报文的referer首部没有值；
                server_names：其值是主机名；
                arbitrary string：直接字符串，可以使用*作为通配符；
                regular expression：被指定的正则表达式模式匹配到的字符串；要使用~起始；
                
                valid_referers none blocked server_names *.magedu.com magedu.* ~\.magedu\.;
                
                if ($invalid_referer) {
                    return 403;
                }
                
回顾：
    master/worker
    
    nginx.conf：
        main block
        events {
            ...
        }
        http {
            ...
            server {
                ...
                listen 
                server_name
                location [=|^~|~|~*] /uri/ {
                    root
                    ...
                }
                ...
        }
        
Nginx(3) 
    
    ngx_http_ssl_module
    
        ssl on | off;
            是否启用当前虚拟主机的ssl功能；
            
        ssl_certificate file;
            当前虚拟主机使用的PEM格式的证书文件；
            
        ssl_certificate_key file;
            当前虚拟机使用的证书文件中的公钥配对儿的私钥文件路径，PEM格式；
            
        ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
            SSL协议的版本；
            
        ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
            指明ssl会话的缓存机制；
                builtin：使用openssl内建的缓存机制，此为各worker独有；
                shared：由各worker共享的缓存；
                    name：缓存空间的名称；
                    size：字节为单位的缓存空间的大小；每1MB内存空间可缓存4000个会话；
                    
        ssl_session_timeout time;
            ssl会话超时时长，指ssl session cache中缓存条目有效时长； 
            
    ngx_http_log_module
    
        The ngx_http_log_module module writes request logs in the specified format.
        
        access_log path [format [buffer=size [flush=time]] [if=condition]];
        access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];
        access_log syslog:server=address[,parameter=value] [format [if=condition]];
        access_log off;
        
        log_format name string ...;
            
        open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
        open_log_file_cache off;
        
            max：最大缓存条目；
            inactive=time：非活动时长； 
            min_uses：最少使用次数；
            valid：验正缓存条目有效性的频率；
            
    ngx_http_rewrite_module
    
        rewrite regex replacement [flag];
            把用户请求的URI基于regex做检查，匹配到时将替换为replacement指定的字符串；          
            在同一个location中存在的多个rewrite规则会自上而下逐个被检查（循环）；可以使用flag控制此循环功能；
            如果replacement是以http://或https://开头，则替换结果会直接以重定向方式返回给客户端；
            
            [flag]：
                last：重写完成后停止对当前uri在当前location中的后续其它重写操作，改为对新uri的新一轮处理；
                break：重写完成后停止对当前uri在当前location中的后续其它重写操作; 
                redirect：重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端，由客户对新URL进行请求；（302）
                permanent：重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端，由客户对新URL进行请求；（301）
                
        rewrite_log on | off;
            是否启用重写日志；启用时，日志信息被发往错误日志；
            
        if (condition) { ... }：
            条件判断机制，在条件满足时，执行配置块中的配置；
            引入了一个新的配置上下文；
            
            condition：
                比较表达式：
                    ==, !=
                    ~：模式匹配，区分字母大小写；
                    ~*：模式匹配，不区分字符大小写；
                    !~：模式不匹配，区分字母大小写；
                    !~*：模式不匹配，不区分字母大小写；
                文件及目录存在性判断：
                    -f, !-f：文件
                    -d, !-d：目录
                    -e, !-e：存在
                    -x, !-x：执行
                    
        return：
            return code [text];
            return code URL;
            return URL;
            
        set $variable value;
            用户自定义变量；
            
    ngx_http_gzip_module
        
        过滤器，对指定类型的资源压缩传输以节约带宽；
        
        gzip on | off;
            启用或禁用gzip压缩响应报文；
        gzip_comp_level level;
            指定压缩比，1-9,默认为1；
        gzip_disable regex ...;
            regex是匹配客户端浏览器类型的模式，表示对所有匹配到的浏览器不执行压缩响应；
        gzip_min_length length;
            触发启用压缩功能的响应报文的最小长度；
        gzip_http_version 1.0 | 1.1;
            设定启用压缩响应功能时，协议的最小版本；
        gzip_types mime-type ...;
            指定仅执行压缩的资源内容类型；默认为text/html；
        gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
            对代理的请求基于何种属性判断其是否应该启用压缩功能；
            
        示例：
            gzip on;
            gzip_http_version 1.0;
            gzip_comp_level 6;
            gzip_disable msie6;
            gzip_min_length 2;
            gzip_types text/plain text/css text/xml application/x-javascript  application/xml  application/json application/java-script;
            
    ngx_http_fastcgi_module
    
        LAMP：
            httpd+php:
                modules
                cgi
                fastcgi
                    proxy_fastcgi_module
            
        LNMP：
            nginx+php:
                fastcgi
                
            php：编译时，支持fpm；
                ./configure   ...  --enable-fpm ...
                
                php-fpm工作方式（类似于httpd的prefork）：
                    listen = 127.0.0.1:9000
                    listen.allowed_clients = 127.0.0.1
                    pm = dynamic | static 
                        pm.start_servers：启动fpm进程时启动的工作进程数量；
                        pm.min_spare_servers：最少空闲进程数；
                        pm.max_spare_servers：最大空闲进程数；
                        pm.max_children：最大工作进程数；
                    user = USERNAME
                    group = GROUPNAME
                    
            fastcgi模块指令：
                
                    fastcgi_pass address;
                        address是fpm服务器监听的地址和端口；
                        
                        示例：     fastcgi   127.0.0.1:9000; 
                    
                    fastcgi_index name;
                        fastcgi应用的主页名称；
                        
                    fastcgi_param parameter value [if_not_empty];
                        传递给fpm服务器的参数及其值； 
                        
                    fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
                        path：文件系统路径，用于存储缓存的文件数据；
                        max_size=size：定义此路径下的多大空间用于存储缓存数据；
                        levels=#[:#[:#]]：缓存目录层级定义；
                            levels=1:2
                        keys_zone=name:size
                            内存中用于缓存k/v映射关系的空间名称及大小；
                        inactive=time
                        
                        注意：只能定义在http上下文 ；
                        
                    fastcgi_cache zone | off;
                        是否启用cache，如果启用，数据缓存于哪个cache中；
                        
                    fastcgi_cache_key string;
                        定义要使用的缓存键；
                        
                        例如： fastcgi_cache_key  $request_uri;
                        
                    fastcgi_cache_methods GET | HEAD | POST ...;
                        缓存哪些类型的请求的相关数据；
                        
                    fastcgi_cache_min_uses number;
                        
                    fastcgi_cache_valid [code ...] time;
                        对不同响应码设定其可缓存时长； 
                        
                    注意：调用缓存时，至少应该 指定三个参数
                        fastcgi_cache
                        fastcgi_cache_key 
                        fastcgi_cache_valid  






























Nginx：

    web服务器：http协议；
    
    http协议：html，MIME（多用途互联网邮件扩展）
        major/minor：
            text/html, text/plain, image/jpeg, ...
            
        web资源：URL （scheme://server:port/path/to/source）

        方法：GET，HEAD，POST，PUT，DELETE，TRACE，OPTIONS，...
            WEBDAV
            
        http事务：request <--> response
            request：
                <method> <URL> <version>
                <HEADERS>
                ...
                
                <body>
                
            response：
                <version> <status> <reason phrase>
                <HEADERS>
                ...
                
                <body>
                
            status：
                1xx：信息类
                2xx：成功类，200
                3xx：重定向，301, 302, 304
                4xx：错误类，客户端错误，404，403
                5xx：错误类，服务器端错误，502
                
        认证：basic, digest
            
        httpd：MPM
            prefork, worker, event
            
    I/O模型：
    
        同步/异步：
            关注的是消息通知机制
        
            同步：synchronous，
            异步：asynchronous，
        
        消息通知：
            同步：等待对方返回消息；
            异步：被调用者通过状态、通知或回调通知调用者
                状态：调用者每隔一段时间就需要检查一次；
                通知：
                回调：
                
        阻塞/非阻塞
            关注调用者等等结果返回之前所处的状态；
            
            阻塞：block，调用结果返回之前，调用者会被挂起；
            非阻塞：nonblock，调用结果返回之前，调用者不会被挂起；
        
    I/O:
        网络IO：本质是socket读取；
        磁盘IO：流；
        
        每次IO，都会经由两个阶段：
            第一步：数据先加载至内核内存空间（缓冲区）；
            第二步：数据从内核缓冲区复制到用户空间的进程的内存中去；
            
            等待数据准备完成；
            数据内核复制到进程；
        
        I/O模型：
            同步阻塞：
            同步非阻塞：
            IO multipexing：select, poll
            Signal Driven IO：
            Asynchronous IO：
            
    Nginx：
    
        C10k, http://nginx.org/
            engin X: nginx
            
            二次开发版：tengine, openresty
            
        Nginx的特性：
            模块化设计，较好的扩展性；
            高可靠性
                master/worker
            支持热部署
                不停机更新配置文件、更换日志文件、更新服务器程序版本；
            低内存消耗
                10000个keep-alive连接模式下的非活动连接仅消耗2.5M内存；
            event-driven, aio, mmap
                
        基本功能：
            静态资源的web服务器；
            http协议反向代理服务器；
            pop3/imap4协议反射代理服务器；
            FastCGI（lnmp）, uWSGI等协议；
            模块化（非DSO），著名有zip, SSL, ...；
            
            web服务器相关的功能：
                虚拟主机、keepalive、访问日志、url rewrite、路径别名、基于ip及用户的访问控制、支付速率限制及并发数限制，...；
                
        Nginx的程序架构：
            master/worker
                一个master进程，可生成一个或多个worker进程；
                    master：加载配置文件、管理worker进程、平滑升级、...
                    worker：http服务、http代理、fastcgi代理、...
                    
        模块类型：
            核心模块： core module 
            标准模块：
                Standard HTTP modules
                Optional HTTP modules
                Mail modules
            3rd party modules：
            
        nginx用来做什么？
            静态资源的web服务器
            http协议反向代理
            
    nginx的安装：
        # yum -y install pcre-devel openssl-devel zlib-devel
        # ./configure \
            --prefix=/usr/local
            --sbin-path=/usr/sbin/nginx
            --conf-path=/etc/nginx/nginx.conf
            --error-log-path=/var/log/nginx/error.log
            --http-log-path=/var/log/nginx/access.log
            --pid-path=/var/run/nginx.pid
            --lock-path=/var/run/nginx.lock
            --http-client-body-temp-path=/var/cache/nginx/client_temp
            --http-proxy-temp-path=/var/cache/nginx/proxy_temp
            --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
            --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
            --http-scgi-temp-path=/var/cache/nginx/scgi_temp
            --user=nginx
            --group=nginx
            --with-http_ssl_module
            --with-http_realip_module
            --with-http_addition_module
            --with-http_sub_module
            --with-http_dav_module
            --with-http_flv_module
            --with-http_mp4_module
            --with-http_gunzip_module
            --with-http_gzip_static_module
            --with-http_random_index_module
            --with-http_secure_link_module
            --with-http_stub_status_module
            --with-http_auth_request_module
            --with-threads
            --with-stream
            --with-stream_ssl_module
            --with-http_slice_module
            --with-file-aio
            --with-http_v2_module
        # make && make install
        
    配置：
        配置文件 的组成部分：
            主配置文件：nginx.conf
                include  conf.d/*.conf
            facscgi, scgi, uwscgi的相关配置
            mime.types
            
        配置指令（必须以分号结尾）：
            directive  value1 [value2...];
            
            支持使用变量：
                内置变量：由模块引入，可直接引用；
                自定义变量：set  variable_name  value;
                    
                    引用变量：$variable_name
                    
        配置文件结构：
            main block：全局配置；
            event {
                ...
            }：事件驱动的相关配置；
            http {
                ...
            }：http协议的相关配置
            mail {
                ...
            }：mail相关的配置；
        
            http相关的配置：
                http {
                    ...
                    ...
                    server {
                        ...
                        server_name
                        root
                        alias 
                        location /uri/ {
                            ...
                        }
                        ...
                    }
                    server {
                        ...
                        ...
                    }
                }
                
        main block：
            配置指令的类别：
                正常运行必备的配置；
                优化性能的配置；
                用于调试、定位问题的配置；
                
            正常运行必备的配置：
                1、user  USERNAME  [GROUPNAME];
                    指定用于运行worker进程的用户和组；
                    
                    user  nginx  nginx;
                    
                2、pid  /PATH/TO/PID_FILE;
                    指定nginx进程的pid文件路径；
                    
                    pid  /var/run/nginx.pid;
                    
                3、worker_rlimit_nofile number;
                    单个worker进程所能够打开的最大文件数；
                    
            性能优化相关的配置：
                1、  worker_processes number | auto;
                    worker的进程数；通常应该为CPU的核心数减1；
                    
                2、worker_cpu_affinity cpumask ...;
                      worker_cpu_affinity auto [cpumask]; 
                      
                      CPUMASK:
                        0000 0001
                        0000 0010
                        0000 0100
                        0000 1000
                        0001 0000
                        ...
                3、worker_priority nice;
                    [-20,19]
                        100-139
                        
            调试、定位问题：
                1、daemon on | off;
                    是否以守护进程方式启动nginx进程；
                    
                2、master_process on | off;
                    是否以master/worker模型启动nignx进程；
                    
                3、error_log file | stderr | syslog:server=address[,parameter=value] | memory:size [debug | info | notice | warn | error | crit | alert | emerg];
                    错误日志文件的记录方式，及其日志级别：
                        方式：
                            file  /PATH/TO/SOME_LOG_FILE;
                            stderr：发送到错误输出；
                             syslog:server=address[,parameter=value]：发送给syslog服务器；
                             memory:size
                             
                        日志级别：
                            debug依赖于configure时的--with-debug选项；
                            
回顾：IO模型、nginx

    IO模型：
        阻塞式
        非阻塞式
        IO复用（select, poll）
        信号驱动的IO（epoll, kqueue, /dev/poll）
        AIO
            
        阶段：等待数据准备完成，复制数据（从内核缓冲区到进程的地址空间）
        
    nginx：master/worker
        master
        worker（）
        cache loader
        cache manager
        
        模块类别：核心模块、标准模块（http标准模块，http可选模块，mail模块）、3rd模块
        
    nginx.conf
        main block
        event {
            ...
        }
        http {
            ...
            server {
                ...
                server_name
                root
                location /uri/ {
                    ...
                }
            }
            server {
                ...
            }
        }
        
Nginx(2)

    nginx.conf：
        main block
        events {
            ...
        }
        
            1、worker_connections number;
                每个worker进程所能够并发打开的最大连接数；
                
                worker_processes * worker_connections
                
            2、use method;
                指明并发连接请求处理时使用的方法；
                
                use  epoll;
                
            3、accept_mutex on | off;
                启用时，表示用于让多个worker轮流地、序列化地响应新请求；
                
        http {
            ...
        }
        
        定义套接字相关功能
        
            1、server { ... }
                配置一个虚拟主机；
                
                server {
                    listen PORT;
                    server_name  HOSTNAME; 
                    root /PATH/TO/DOCUMENTROOT;
                    ...
                }
                
                注意：
                    (1) 基于port的虚拟主机：
                        listen指令要使用不同的端口；
                    (2) 基于Hostname的虚拟主机；
                        server_name指令指向不同的主机名；
                    (3) 基于ip的虚拟主机：
                        listen IP:PORT;
                
            2、listen address[:port] [default_server] [ssl] [backlog=number] [rcvbuf=size] [sndbuf=size];
                  listen port [default_server] [ssl];
                  listen unix:path [default_server] [ssl] ;
                  
                default_server：默认虚拟主机；
                ssl：限制只能通过ssl连接提供服务；
                backlog：后缓队列的长度；
                rcvbuf：接收缓冲大小；
                sndbuf：发送缓冲区大小；
                
            3、server_name name ...;
                指明当前server的主机名；后可跟一个或空白字符分隔的多个主机；
                支持使用*任意长度的任意字符；
                支持~起始的正则表达式模式字符串；
                
                应用策略：
                    (1) 首先精确匹配；
                    (2) 左则*通配符匹配；
                    (3) 右侧*通配符匹配；
                    (4) 正则表达式模式匹配；
                                                                
                    server_name  www.magedu.com;
                    
                    server_name *.magedu.com;
                    
                    server_name  www.magedu.*;
                    
                    server_name ~^.*\.magedu\..*$;
                    
                    mail.magedu.com, www.magedu.com
                    
            4、tcp_nodelay  on|off;
                对keepalived模式下的连接是否启用TCP_NODELAY选项；
                
            5、sendfile on | off;
                是否启用sendfile功能；
                
        
        定义路径相关配置
            6、root path;
                设置web资源路径映射；用于指明用户请求的url所对应的本地文件系统上的文档所在目录路径；
                可用上下文：http, server, location, if
                
            7、location [ = | ~ | ~* | ^~ ] uri { ... }
                  location @name { ... }
                  
                  根据用户请求的URI来匹配定义的location，匹配到时，此请求将被相应的location块中的指令所处理；
                  
                server {
                    ...
                    location {
                        
                    }
                    location {
                        ...
                    }
                }
                
                =：URI精确匹配；
                ~：做正则表达式模式匹配，区分字符大小写；
                ~*：做正则表达式模式匹配，不区分字符大小写；
                ^~：对URI的左半部分做匹配检查，不区分字符大小写；
                
                匹配优先级：=、^~、~/～*、不带符号；
                
            8、alias path;
                定义路径别名，文档映射的一种机制；仅能用于location上下文；
                
                alias  /bbs/  /web/forum/

                http://www.magedu.com/bbs/a.jpg     
                    
                    location  /bbs/  {
                        alias  /web/forum/;
                    }
                    
                    /web/forum/a.jpg
                
                    location  /bbs/  {
                        root  /web/forum/;
                    }
                    
                    /web/forum/bbs/a.jpg
                
                
                注意：
                    root指令：给定的路径对应于location中的/uri/左侧的/;
                    alias指令：给定的路径对应于location中的/uri/右侧的/；
                
            9、index file ...;
                可用位置：http, server, location
                
                默认主面；
                
            10、error_page code ... [=[response]] uri;
                根据用户请求的资源的http响应的状态码实现错误页重定向；
                
                http://www.magedu.com/hello.html --> 因为资源不存在而被改为对
                    http://www.magedu.com/404.html
                    
            11、
            
            
        
        定义客户端请求的相关配置
        
            12、keepalive_timeout timeout [header_timeout];
                设定保持连接的超时时长，0表示禁止长连接 ；默认为75s;
                
            13、keepalive_requests number;
                在一次长连接上所允许请求的资源的最大数量，默认为100；
                
            14、keepalive_disable none | browser ...;
                对哪种浏览器禁用长连接；
                
            15、send_timeout time;
                向客户端发送响应报文的超时时长； 特别地，是指两次写操作之间的间隔时长； 
            
            16、client_body_buffer_size size;
                用于接收客户端请求报文的body部分的缓冲区大小；默认为16k；超时此大小时，其将被暂存到磁盘上；
                
            17、client_body_temp_path path [level1 [level2 [level3]]];
                设定用于存储客户端请求报文的body部分的临时存储路径及子目录结构和数量；
                
                /var/tmp/body  2 1 2
                    00-ff
            
        
        对客户的请求进行限制的相关配置：
            18、limit_rate rate;
                限制响应给客户端的传输速率，单位是bytes/second，0表示无限制；
                
            19、limit_except method ... { ... };
                限制对指定的请求方法之外的其它方法的使用客户端；
                
                limit_except GET POST {
                    allow  172.18.0.0/16;
                    deny all;
                }
                
                表示除了GET和POST之外的其它方法仅允许172.18.0.0/16中的主机使用；
        
        文件操作优化的配置：
            20、aio on | off | threads[=pool];
                是否启用aio功能；
                
            21、directio size | off;
                
            22、open_file_cache off;
                open_file_cache max=N [inactive=time];
                    nginx可以缓存以下三种信息：
                        (1) 文件的描述符、文件大小和最近一次的修改时间；
                        (2) 打开的目录的结构；
                        (3) 没有找到的或者没有权限访问的文件的相关信息；
                        
                    max=N：可缓存的缓存项上限；达到上限后会使用LRU算法实现缓存管理；
                    
                    inactive=time：缓存项的超时时长，在此处指定的时长内未被命中的缓存项即为非活动项；
                    
            23、open_file_cache_errors on | off;
                是否缓存查找时发生错误的文件一类的信息；
                
            24、open_file_cache_min_uses number;
                在open_file_cache指令的inactive参数指定的时长内，至少命中此处指定的次数方可不被归类到非活动项；
                
            25、open_file_cache_valid time;
                缓存项有效性的检查频率；默认是60s；
                
        ngx_http_access_module模块：
            实现基于ip的访问控制功能；
            
            26、allow address | CIDR | unix: | all;
            27、deny address | CIDR | unix: | all;
            
            可用上下文：http, server, location, limit_except

        ngx_http_auth_basic_module模块：
            28、auth_basic string | off;
                使用basic机制进行用户认证；
                
            29、auth_basic_user_file file;
                认证用的账号密码文件；
                
                文件格式：
                    name:password:commet
                    
                密码格式：
                    htpasswd命令；
                    
                    location /admin/ {
                    auth_basic "Admin Area";
                    auth_basic_user_file /etc/nginx/.ngxpasswd;
                    }
                
        ngx_http_stub_status_module模块：
            用于输出nginx的基本状态信息；
            
            Active connections: 1 
            server accepts handled requests
            155 155 298 
            Reading: 0 Writing: 1 Waiting: 0        
            
            Active connections:  处于活动状态的客户端连接的数量；
            accepts：已经接受的客户端请求的总数；
            handled：已经处理完成的客户端请求的总数；
            requests：客户端发来的总的请求数；
            Reading：处于读取客户端请求报文首部的连接数；
            Writing：处于向客户端发送响应报文过程中的连接数；
            Waiting：处于等待客户端发出请求的空闲连接数；
            
        ngx_http_referer_module模块：
            The ngx_http_referer_module module is used to block access to a site for requests with invalid values in the “Referer” header field.
            
            30、valid_referers none | blocked | server_names | string ...;
                定义合法的referer数据；
                
                none：请求报文首部没有referer首部；
                blocked：请求报文的referer首部没有值；
                server_names：其值是主机名；
                arbitrary string：直接字符串，可以使用*作为通配符；
                regular expression：被指定的正则表达式模式匹配到的字符串；要使用~起始；
                
                valid_referers none blocked server_names *.magedu.com magedu.* ~\.magedu\.;
                
                if ($invalid_referer) {
                    return 403;
                }
                
回顾：
    master/worker
    
    nginx.conf：
        main block
        events {
            ...
        }
        http {
            ...
            server {
                ...
                listen 
                server_name
                location [=|^~|~|~*] /uri/ {
                    root
                    ...
                }
                ...
        }
        
Nginx(3) 
    
    ngx_http_ssl_module
    
        ssl on | off;
            是否启用当前虚拟主机的ssl功能；
            
        ssl_certificate file;
            当前虚拟主机使用的PEM格式的证书文件；
            
        ssl_certificate_key file;
            当前虚拟机使用的证书文件中的公钥配对儿的私钥文件路径，PEM格式；
            
        ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
            SSL协议的版本；
            
        ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
            指明ssl会话的缓存机制；
                builtin：使用openssl内建的缓存机制，此为各worker独有；
                shared：由各worker共享的缓存；
                    name：缓存空间的名称；
                    size：字节为单位的缓存空间的大小；每1MB内存空间可缓存4000个会话；
                    
        ssl_session_timeout time;
            ssl会话超时时长，指ssl session cache中缓存条目有效时长； 
            
    ngx_http_log_module
    
        The ngx_http_log_module module writes request logs in the specified format.
        
        access_log path [format [buffer=size [flush=time]] [if=condition]];
        access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];
        access_log syslog:server=address[,parameter=value] [format [if=condition]];
        access_log off;
        
        log_format name string ...;
            
        open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
        open_log_file_cache off;
        
            max：最大缓存条目；
            inactive=time：非活动时长； 
            min_uses：最少使用次数；
            valid：验正缓存条目有效性的频率；
            
    ngx_http_rewrite_module
    
        rewrite regex replacement [flag];
            把用户请求的URI基于regex做检查，匹配到时将替换为replacement指定的字符串；          
            在同一个location中存在的多个rewrite规则会自上而下逐个被检查（循环）；可以使用flag控制此循环功能；
            如果replacement是以http://或https://开头，则替换结果会直接以重定向方式返回给客户端；
            
            [flag]：
                last：重写完成后停止对当前uri在当前location中的后续其它重写操作，改为对新uri的新一轮处理；
                break：重写完成后停止对当前uri在当前location中的后续其它重写操作; 
                redirect：重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端，由客户对新URL进行请求；（302）
                permanent：重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端，由客户对新URL进行请求；（301）
                
        rewrite_log on | off;
            是否启用重写日志；启用时，日志信息被发往错误日志；
            
        if (condition) { ... }：
            条件判断机制，在条件满足时，执行配置块中的配置；
            引入了一个新的配置上下文；
            
            condition：
                比较表达式：
                    ==, !=
                    ~：模式匹配，区分字母大小写；
                    ~*：模式匹配，不区分字符大小写；
                    !~：模式不匹配，区分字母大小写；
                    !~*：模式不匹配，不区分字母大小写；
                文件及目录存在性判断：
                    -f, !-f：文件
                    -d, !-d：目录
                    -e, !-e：存在
                    -x, !-x：执行
                    
        return：
            return code [text];
            return code URL;
            return URL;
            
        set $variable value;
            用户自定义变量；
            
    ngx_http_gzip_module
        
        过滤器，对指定类型的资源压缩传输以节约带宽；
        
        gzip on | off;
            启用或禁用gzip压缩响应报文；
        gzip_comp_level level;
            指定压缩比，1-9,默认为1；
        gzip_disable regex ...;
            regex是匹配客户端浏览器类型的模式，表示对所有匹配到的浏览器不执行压缩响应；
        gzip_min_length length;
            触发启用压缩功能的响应报文的最小长度；
        gzip_http_version 1.0 | 1.1;
            设定启用压缩响应功能时，协议的最小版本；
        gzip_types mime-type ...;
            指定仅执行压缩的资源内容类型；默认为text/html；
        gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
            对代理的请求基于何种属性判断其是否应该启用压缩功能；
            
        示例：
            gzip on;
            gzip_http_version 1.0;
            gzip_comp_level 6;
            gzip_disable msie6;
            gzip_min_length 2;
            gzip_types text/plain text/css text/xml application/x-javascript  application/xml  application/json application/java-script;
            
    ngx_http_fastcgi_module
    
        LAMP：
            httpd+php:
                modules
                cgi
                fastcgi
                    proxy_fastcgi_module
            
        LNMP：
            nginx+php:
                fastcgi
                
            php：编译时，支持fpm；
                ./configure   ...  --enable-fpm ...
                
                php-fpm工作方式（类似于httpd的prefork）：
                    listen = 127.0.0.1:9000
                    listen.allowed_clients = 127.0.0.1
                    pm = dynamic | static 
                        pm.start_servers：启动fpm进程时启动的工作进程数量；
                        pm.min_spare_servers：最少空闲进程数；
                        pm.max_spare_servers：最大空闲进程数；
                        pm.max_children：最大工作进程数；
                    user = USERNAME
                    group = GROUPNAME
                    
            fastcgi模块指令：
                
                    fastcgi_pass address;
                        address是fpm服务器监听的地址和端口；
                        
                        示例：     fastcgi   127.0.0.1:9000; 
                    
                    fastcgi_index name;
                        fastcgi应用的主页名称；
                        
                    fastcgi_param parameter value [if_not_empty];
                        传递给fpm服务器的参数及其值； 
                        
                    fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
                        path：文件系统路径，用于存储缓存的文件数据；
                        max_size=size：定义此路径下的多大空间用于存储缓存数据；
                        levels=#[:#[:#]]：缓存目录层级定义；
                            levels=1:2
                        keys_zone=name:size
                            内存中用于缓存k/v映射关系的空间名称及大小；
                        inactive=time
                        
                        注意：只能定义在http上下文 ；
                        
                    fastcgi_cache zone | off;
                        是否启用cache，如果启用，数据缓存于哪个cache中；
                        
                    fastcgi_cache_key string;
                        定义要使用的缓存键；
                        
                        例如： fastcgi_cache_key  $request_uri;
                        
                    fastcgi_cache_methods GET | HEAD | POST ...;
                        缓存哪些类型的请求的相关数据；
                        
                    fastcgi_cache_min_uses number;
                        
                    fastcgi_cache_valid [code ...] time;
                        对不同响应码设定其可缓存时长； 
                        
                    注意：调用缓存时，至少应该 指定三个参数
                        fastcgi_cache
                        fastcgi_cache_key 
                        fastcgi_cache_valid  
                        
Nginx(5)

    ngx_http_proxy_module 
        
        (1) proxy_pass URL;
            location, if in location, limit_except
            
            proxy_pass后面的路径不带uri时，其会将location的uri传递给后端主机；
            
                location  /uri/  {
                    proxy_pass  http://HOST; 
                }
                
            proxy_pass后面路径是一个uri时，其会将location的uri替换为proxy_pass后端主机的uri；
            
                location  /uri/  {
                    proxy_pass  http://HOST/new_uri/;
                }
                
            如果location定义其uri时使用了正则表达模式匹配机制，则proxy_pass后的路径必须不能使用uri；
                location  ~|~*  PATTERN {
                    proxy_pass  http://HOST;
                }
            
                
                http://www.magedu.com/bbs/  -->  http://172.16.100.7/bbs/
                http://www.magedu.com/bbs/  -->  http://172.16.100.7/
                        
        (2)     proxy_set_header
                proxy_set_header field value;
                设定向后端主机发送的请求报文的首部及其值； 
                
            示例：
                proxy_set_header  X-Real-IP  $remote_addr;
                proxy_set_header  X-Forwarded-For $proxy_add_x_forwared_for;
                
                        
        缓存相关的选项（缓存要先定义，后调用）
        (3) proxy_cache_path path [levels=levels]  keys_zone=name:size [inactive=time] [max_size=size] ;
            用于http上下文 ；
            
        (4) proxy_cache zone | off;
            调用缓存，默认为off；
            
        (5) proxy_cache_key string;
            定义缓存键；
                proxy_cache_key  $request_uri
                proxy_cache_key  $scheme$proxy_host$request_uri
                
        (6) proxy_cache_valid [code ...] time;
            为不同的响应码设定其缓存的时长； 
            
            示例：
                proxy_cache_valid  200 302  10m;
                proxy_cache_valid  404 1m;
                
        (7) proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
            Determines in which cases a stale cached response can be used when an error occurs during communication with the proxied server. 
            
回顾：
    nginx：proxy
        正向代理
        反向代理
        
    ngx_http_proxy_module:
        proxy_pass
        proxy_set_header
        proxy_cache_path (http)
        proxy_cache 
        proxy_cache_key
        proxy_cache_valid
        proxy_cache_use_stale
        
Nginx(6)
    
    ngx_http_proxy_module模块
        
        跟连接相关的指令
            (8) proxy_connect_timeout time;
                与后端服务器建立连接的超时时长，默认为60s，最长为75s；
                
            (9) proxy_read_timeout time;
                等待后端主机发送响应报文的超时时长，默认为60s；
                
            (10) proxy_send_timeout time;
                向后端服务发送请求报文的超时时长，默认为60s；
                
    ngx_http_headers_module
        用于在响应给客户端的报文中添加首部；
        
        (1) add_header name value [always];
            向响应报文添加自定义首部，并赋值；           
            http, server, location, if in location
            
            add_header  X-Via  $server_addr;
            
        (2) expires [modified] time;
            expires epoch | max | off;
            
            用于添加Expire及Cache-Control首部或修改首部的值；
            
    ngx_http_upstream_module
        将多个后端主机定义为服务器组，而后可由proxy_pass, fastcgi_pass, memcached_pass等进行引用；
        
        (1) upstream name { ... }
            定义后端服务器组；引入新的上下文；只能用于http上下文；
            name：名称，直接字符串；
            
        (2) server
            server address [parameters];
            
            定义服务器的地址和相关的参数；
                地址格式：
                    IP[:port]
                    HOSTNAME[:port]
                    unix:/PATH/TO/SOME_SOCK_FILE
                    
                参数：
                    weight=number：服务器权重；
                    max_fails=number：最大失败尝试次数；
                    fail_timeout=time：设置服务器不可用超时时长； 
                    backup：备用主机；
                    down：手动标记其不再处理任何用户请求； 
                    
        (3) ip_hash
            源地址哈希调度算法；
            
        (4) least_conn
            最少连接调度算法；
            
        (5) health_check [parameters];
            定义后端主机的健康状态检测机制；只能用于location上下文；
            
            可用参数：
                interval=#：检测的频度，默认为5秒；
                fails=number：判定为失败的检测次数；
                passes=number：判定为成功的检测次数；
                uri=uri：执行健康状态检测时请求的uri；
                match=name：基于哪个match做检测结果为“成功”或“失败”的判定；
                port=number：向服务器的哪个端口发起健康状态检测请求；
                
        (6) match name { ... }
            仅能用于http上下文 ；对后端主机做健康状态检测时，定义其结果判断标准；
            
            专用指令：
                status：期望的响应码；
                    status  CODE
                    status  ! CODE
                    status CODE-CODE 
                header：基于响应首部进行判断
                    header HEADER=VALUE
                    header HEADER!=VALUE
                    header [!] HEADER
                    header HEADER ~ VALUE
                body：期望的响应报文的主体部分应该有的内容；
                    body ~ "CONTENT"
                    body !~ "CONTENT"
                    
        (7) hash key [consistent];
            定义调度方法，可自定义基于何种信息(key)进行绑定；
            
            hash $remote_addr
            hash $request_uri
            hash $cookie_username
            
        补充：内置变量的调用，向客户端展示缓存命令与否：
            add_header  X-Cache  $upstream_cache_status;
            
    课外作业：尝试使用tengine实现此前的讲到的所有内容；
    博客作业：nginx的所有内容，重点实现：
        url rewrite, gzip, https, upstream, fastcgi
        
memcached：
    
    数据结构模型：
        结构化数据：关系型数据库；
        半结构化数据：xml, json, ... （NoSQL）；
        非结构化数据：文件系统； 
        
    k/v：
        memcached：存储于内存中；
        redis：存储于内存中，周期性地将数据同于辅存上；
        
    memcached：
        LiveJournal旗下的Danga Interactive
        
        特性：
            k/v缓存：可序列化数据；存储项：key, value, flag, expire time；
            功能的实现一半依赖于服务端，一半依赖客户端；
            分布式缓存：互不通信的分布式集群；
            O(1)的执行效率；
            清理过期数据：LRU 
                缓存项过期
                缓存空间用尽
            
        缓存系统的种类：
            代理式缓存；
            旁路式缓存；
            
        分布式系统主机路由：
            取模法
            一致性hash；
            
        memcached：
            11211/tcp, 11211/udp
            
            主程序：memcached
            环境配置文件：/etc/sysconfig/memcached
            
            协议格式
                文本协议
                二进制协议   
                
            命令：
                统计类：stats，stats items, stats slabs, stats sizes
                存储类：set, add, replace, append, prepend
                获取数据类：get, delete, incr/decr
                清空：flush_all
                
            memcached程序的常用选项：
                -l <ip_addr>： 监听的地址；
                -m <num>：缓存空间大小，单位为MB；默认为64；
                -c <num>：最大并发连接数，默认为1024；
                -p <num>：Listen on TCP port <num>, the default is port 11211.
                -U <num>：Listen on UDP port <num>, the default is port 11211, 0 is off.
                -M：缓存空间耗尽时，向请求者返回错误信息，而不是基于LRU算法进行缓存清理；
                -f <factor>：growth factor，增长因子；
                -t <threads>：处理用于请求的线程数；
                
            memcached默认没有认证机制，但可借助于SASL进行认证；
            
            php连接memcached服务的模块：
                memcache：php-pecl-memcache
                memcached：php-pecl-memcached
                    
            可提供工具程序的程序包：libmemcached；
            
    LB Cluster保持会话的方法：
        session sticky
        session cluster 
        session server 
        
    博客作业：
        nginx负载均衡用户请求至后端多个ammp主机，php的会话保存于memcached中；
        
    
